import { ContextRender } from "./ContextRender";
import { Device } from "@bidiao/framework";

const SHADOWBLUR = 25;
// 生成随机速度
function randomSpeed() {
  const speed = Math.random() * 2 - 1; // 生成-1 ~ 1 的数据
  // 二次计算范围为 -1.5~-0.5 ，0.5~1.5
  return speed > 0 ? speed + 0.5 : speed - 0.5;
  // return speed > 0 ? speed + 0.5 : speed - 0.5;
}
// 生成随机透明度
function randomOpacity() {
  return Math.random() * 0.5 + 0.5;
}
// 生成随机大小
function randomSize() {
  return Math.random() + (Device.Mobile ? 0.5 : 2);
}
// 生成随机角度
function randomAnimAngle() {
  return Math.random() * 180;
}
/** 一个闪烁的星星对象 */
export default class Star extends ContextRender {
  /** 大小 */
  size: number;
  /** 闪烁的速度，动画速度 -1.5~-0.5 ，0.5~1.5 */
  speed = randomSpeed() / 2;
  /** 动画起始角度值 0~180 */
  animAngle = randomAnimAngle();

  // get OffsetX(): number {
  //   return this.point.x - this.size / 2;
  // }
  // get OffsetY(): number {
  //   return this.point.y - this.size / 2;
  // }

  get center() {
    return this.options.width / 2;
  }
  /**
   *
   * @param point 初始化时的位置坐标
   * @param color 星星的颜色
   */
  constructor(point: { x: number; y: number }, color: string) {
    // 初始化一个随机大小的星星(半径)
    const size = randomSize();
    const canvasSize = (size + SHADOWBLUR) * 2;
    super(point, {
      width: canvasSize,
      height: canvasSize,
      shadowBlur: SHADOWBLUR,
      shadowColor: "#fff",
      color,
      opacity: randomOpacity(),
    });
    this.size = size;
  }

  // 下一帧的绘制方法
  protected render(context: CanvasRenderingContext2D) {
    this.animAngle += this.speed;
    context.save();
    context.beginPath();
    context.translate(this.center, this.center);

    const scale = Math.sin((this.animAngle * Math.PI) / 180);
    context.scale(scale, scale);
    context.arc(0, 0, this.size, 0, 2 * Math.PI, true);

    context.closePath();
    context.fill(); // 填充
    // context.translate(-this.center, -this.center);

    context.restore();

    // 闪烁结束后销毁
    if (Math.abs(this.animAngle) > 180) {
      this.destory();
    }
  }
}
